package com.longtop.perform.zb.system.web;

import java.util.Map;

import com.longtop.framework.base.BaseAction;
import com.longtop.framework.common.QueryConditions;
import com.longtop.framework.common.QueryResult;
import com.longtop.framework.security.BaseCheckedException;
import com.longtop.framework.security.SessionObject;
import com.longtop.framework.util.BeanUtil;
import com.longtop.framework.util.WebUtil;
import com.longtop.intelliweb.action.IActionContext;
import com.longtop.intelliweb.action.IInitContext;
import com.longtop.intelliweb.view.Dataset;
import com.longtop.perform.zb.system.model.TZbSystem;
import com.longtop.perform.zb.system.service.SystemService;

/**
 * 指标管理--指标体系
 * 
 * @author 杨向阳
 * 
 */
public class SystemListAction extends BaseAction {

	private final static String DATASET_SYSTEM = "Dataset_System";

	/**
	 * 系统共用：初始化调用
	 */
	public void init(IInitContext context) {
		super.init(context);
	}

	/**
	 * 本页jsp：初始化业务数据(覆写父类方法)
	 */
	public void thisPageInit(IInitContext context) {
		// 调用公用查询方法
		commonQuery(context, false);
	}

	/**
	 * 自定义查询
	 * 
	 * @param context
	 */
	public void searchSystem(IActionContext context) {

		// 调用公用查询方法
		commonQuery(context, true);
	}

	/**
	 * 执行翻页查询
	 * 
	 * @param context
	 */
	public void loadSystem(IActionContext context) {

		// 调用公用查询方法
		commonQuery(context, false);
	}

	/**
	 * 保存、修改、删除一起做！
	 * 
	 * @param context
	 */
	public void saveSystem(IActionContext context) {

		Dataset dataset = (Dataset) context.getDataset(DATASET_SYSTEM); // 获取页面上的dataset的结构

		// 验证数据集是否存在及是否有变化
		if (!WebUtil.validateDatasetChange(this, dataset, DATASET_SYSTEM)) {
			return;
		}

		SystemService systemClassService = this.getBean(SystemService.BEAN_ID); // 调用Spring的业务逻辑类

		try {
			// 把dataset转成要删除的主键列表、新增bean及更新bean列表
			Map changeMap = WebUtil.datasetToObjectList(dataset, "systemId", TZbSystem.class);

			// 获得SessionObject对象,得到用户对象
			SessionObject sessionObject = this.getSessionObject(context);

			// 调用业务逻辑层的批量更新方法(在一个事务内实现)
			Integer[] count = systemClassService.saveSystem(changeMap, sessionObject);

			// 向JSP页面传递操作结果信息
			this.hintInfoMessage(WebUtil.getSubmitSuccessInfo(count[0].intValue(), count[1].intValue(), count[2].intValue()));
		} catch (BaseCheckedException e) {
			// 在界面显示错误信息
			this.hintErrorMessage(e.getMessage());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 通用查询.将数据查询出来，拼装数据。
	 * 
	 * @param object
	 *            上下文：IInitContext或IActionContext
	 * @param isFirstPageNoo
	 *            是否从第一页开始查询！
	 */
	private void commonQuery(Object object, boolean isFirstPageNo) {

		SystemService systemClassService = getBean(SystemService.BEAN_ID); // 调用Spring的业务逻辑类
		QueryConditions queryConditions = WebUtil.createQueryConditions(); // 查询条件辅助类

		// 获取dataset,验证数据集对象是否存在
		Dataset dataset = this.getDataset(object, DATASET_SYSTEM);
		if (!WebUtil.validateDatasetExist(this, dataset, DATASET_SYSTEM)) {
			return;
		}

		// 判断是否是由 init方法 调用
		if (object instanceof IActionContext) {
			IActionContext context = (IActionContext) object;

			// 取得界面传入的查询条件(必须设置command的submitForm=true)
			String systemId = context.getElementValue("Text_systemId");
			String systemName = context.getElementValue("Text_systemName");
			String fitObject = context.getElementValue("Text_fitObject");
			String systemDesc = context.getElementValue("Text_systemDesc");

			// 查询条件设值
			queryConditions.setCondition("systemId", QueryConditions.EQUAL, systemId);
			queryConditions.setCondition("systemName", QueryConditions.INCLUDE, systemName);
			queryConditions.setCondition("systemDesc", QueryConditions.INCLUDE, systemDesc);
			queryConditions.setCondition("fitObject", QueryConditions.EQUAL, fitObject);
		}

		// 当前第几页
		int pageNo = 1;
		if (!isFirstPageNo)
			pageNo = dataset.getPageNo();

		// 每页多少条记录
		int pageSize = dataset.getPageSize();

		// 调用service层，依据条件查询第一页记录，并获取总页数
		QueryResult queryResult = systemClassService.loadSystem(queryConditions, pageNo, pageSize);
		BeanUtil.queryResultToDataset(queryResult, dataset, false, true);
	}

	/**
	 * 复制指标体系
	 * 
	 * @param context
	 */
	public void copySystem(IActionContext context) {
		// 得到参数用户Id
		String systemId = context.getCommandParameterValue("systemId");

		// SessionObject对象
		// SessionObject sessionObject = this.getSessionObject(context);

		// 调用Spring的业务逻辑类
		SystemService systemService = getBean(SystemService.BEAN_ID);

		// 获得SessionObject对象,得到用户对象
		SessionObject sessionObject = this.getSessionObject(context);
		try {
			systemService.saveZbSystem(systemId, sessionObject);
		} catch (BaseCheckedException e) {
			this.hintErrorMessage(e.getMessage());
		}
	}
}